package com.java.simple.study.juc.pattern;

import java.util.Objects;

/**
 * @author zhoujunlin
 * @date 2022年06月07日 17:19
 * @desc 单例模式
 */
public final class Singleton3 {

    private static volatile Singleton3 INSTANCE = null;

    private Singleton3() {
    }

    /**
     * 双重检验
     *
     * @return
     */
    public static Singleton3 getInstance() {
        // 实例没创建，才会进入内部的 synchronized代码块
        if (Objects.isNull(INSTANCE)) {
            synchronized (Singleton3.class) { // t2
                if (Objects.isNull(INSTANCE)) {
                    // 也许有其它线程已经创建实例，所以再判断一次
                    INSTANCE = new Singleton3(); //t1 创建并同步主存
                }
            }
        }
        return INSTANCE;
    }

}
